home *** CD-ROM | disk | FTP | other *** search
/ Mac Magazin/MacEasy 19 / Mac Magazin and MacEasy Magazine CD - Issue 19.iso / Wissenschaft & Technik / Open Prolog / Samples / puzzle next >
Text File  |  1994-04-18  |  862b  |  22 lines

  1.  
  2. %simple puzzle: pick a number with all nine digits 1,2,3,4,5,6,7,8,9 in it exactly once,
  3. %such that the first k digits in the number are divisible by k, for k from 1 to 9.
  4.  
  5. %call: stageDiv("123456789",1,[],Result).
  6.  
  7. stageDiv([],Divisor,Result,NewNumber) :- %finished - just generate result number from string
  8.         name(NewNumber,Result).
  9. stageDiv(Digits,Divisor,DigitListSoFar,Result) :-
  10.         select(NewDigit,Digits,RestOfDigits), %pick some digit
  11.         append(DigitListSoFar,[NewDigit],NewDigitList),
  12.         name(NewNumber,NewDigitList), %turn it into a number
  13.         0 is NewNumber mod Divisor, %check against next divisor
  14.         NewDivisor is Divisor+1,
  15.         stageDiv(RestOfDigits,NewDivisor,NewDigitList,Result). %do the rest
  16.  
  17. append([],X,X).
  18. append([X|Y],Z,[X|R]) :- append(Y,Z,R).
  19.  
  20. select(X,[X|R],R).
  21. select(X,[Y|R],[Y|Z]) :- select(X,R,Z).
  22.